package cn.iocoder.yudao.framework.redissonlock.core.annotation;

import cn.iocoder.yudao.framework.redissonlock.core.keyresolver.RedissonLockKeyResolver;
import cn.iocoder.yudao.framework.redissonlock.core.keyresolver.impl.DefaultRedissonLockKeyResolver;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 分布式锁注解
 *
 * @author 徐煜东
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RedissonLock {

    /**
     * 锁的唯一标识 key，可以是 SpEL 表达式（优先）或 keyResolver 计算出来。
     */
    String key() default "";

    /**
     * key 解析器，用于动态计算 key。
     * 优先级低于直接配置 key。
     */
    Class<? extends RedissonLockKeyResolver> keyResolver() default DefaultRedissonLockKeyResolver.class;

    /**
     * 锁超时时间，默认 30 秒。
     */
    long expire() default 30;

    /**
     * 超时时间单位，默认秒。
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 加锁失败时的提示信息（可选）。
     */
    String message() default "Failed to acquire lock, please try again later.";


}
